/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.assembler.output.p2bis;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.client.om.IAdresse;
import fr.generali.accueilclient.client.om.impl.Adresse;
import fr.generali.accueilclient.utils.stringbuilder.StringBuilderUtils;
import fr.generali.refservcommuns.rce.rechpersgen.extrait.DtoExtraitAdressePostale;

/**
 * Transforme un {@link DtoExtraitAdressePostale} en {@link IAdresse}
 * 
 * @author Guillaume Lancelin
 */
@Component("dtoExtraitAdressePostale2AdresseConverter")
public class DtoExtraitAdressePostale2AdresseConverter implements Converter<DtoExtraitAdressePostale, IAdresse> {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(DtoExtraitAdressePostale2AdresseConverter.class);

    /**
     * {@inheritDoc}
     */
    public IAdresse convert(DtoExtraitAdressePostale input) {
        LOGGER.info("assemble");
        IAdresse adresse = null;

        if (input != null) {
            adresse = new Adresse();
            adresse.setCodePostal(input.getCodePostal());
            adresse.setPointGeographique(input.getLigne3());
            adresse.setPointRemise(input.getLigne4());

            StringBuilder ville = new StringBuilder(StringUtils.EMPTY);
            if (input.getLocalite() != null) {
                ville.append(input.getLocalite());
            }
            adresse.setVille(ville.toString());

            if (StringUtils.isNotBlank(input.getNumeroRue()) && StringUtils.isNotBlank(input.getNomRue())) {
                adresse.setVoie(StringBuilderUtils.createBuilder(input.getNumeroRue(),
                                StringBuilderUtils.SEPARATOR_ESPACE, input.getNomRue()));
            } else if (StringUtils.isBlank(input.getNumeroRue()) && StringUtils.isNotBlank(input.getNomRue())) {
                adresse.setVoie(input.getNomRue());
            }

            else {
                adresse.setVoie(StringUtils.EMPTY);
            }
        }

        return adresse;
    }
}
